package JdbcUitils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.sql.Clob;
import java.util.regex.Pattern;

/**
 * 字符串工具类
 * 
 * @version 1.0
 * @date 2012-09-01
 * @author DWZ框架组
 */
public final class StringUtil {

	/* 数据字符串正则表达式 */
	private static Pattern NUMBER_PATTERN = Pattern.compile("[0-9]+");

	private StringUtil() {

	}

	/**
	 * 指定位数，在左对齐，右边空位添加全角空白<br>
	 * st是NULL的时候，返回NULL
	 * 
	 * @param st
	 *            对象字符串
	 * @param cnt
	 *            位数
	 * @return 指定位数处理后的字符串
	 */
	public static String lPadSpace(String st, int cnt) {

		return lPad(st, '　', cnt);

	}

	/**
	 * 指定位数，在左对齐，右边空位添加字符<br>
	 * st是NULL的时候，返回NULL
	 * 
	 * @param st
	 *            对象字符串
	 * @param pad
	 *            添加的字符
	 * @param cnt
	 *            位数
	 * @return 指定位数处理后的字符串
	 */
	public static String lPad(String st, char pad, int cnt) {

		if (null == st) {
			return st;
		} else {
			StringBuilder sb = new StringBuilder(st);
			while (sb.toString().length() < cnt) {
				sb.append(pad);
			}
			return sb.toString();
		}

	}

	/**
	 * 指定位数，在左对齐，右边空位添加0<br>
	 * st是NULL的时候，返回NULL
	 * 
	 * @param st
	 *            对象字符串
	 * @param cnt
	 *            位数
	 * @return 指定位数处理后的字符串
	 */
	public static String lPadZero(String st, int cnt) {

		return lPad(st, '0', cnt);

	}

	/**
	 * 指定位数，在左对齐，右边空位添加0<br>
	 * st是NULL的时候，返回NULL
	 * 
	 * @param i
	 *            对象数字
	 * @param cnt
	 *            位数
	 * @return 指定位数处理后的字符串
	 */
	public static String lPadZero(int i, int cnt) {

		return lPad(Integer.toString(i), '0', cnt);

	}

	/**
	 * 指定位数，在右对齐，左边空位0<br>
	 * st是NULL的时候，返回NULL
	 * 
	 * @param i
	 *            对象数字
	 * @param cnt
	 *            位数
	 * @return 指定位数处理后的字符串
	 */
	public static String rPadZero(int i, int cnt) {

		return rPad(Integer.toString(i), '0', cnt);

	}

	/**
	 * 指定位数，在右对齐，左边空位0<br>
	 * st是NULL的时候，返回NULL
	 * 
	 * @param st
	 *            对象字符串
	 * @param cnt
	 *            位数
	 * @return 指定位数处理后的字符串
	 */
	public static String rPadZero(String st, int cnt) {

		return rPad(st, '0', cnt);

	}

	/**
	 * 指定位数，在右对齐，左边空位字符<br>
	 * st是NULL的时候，返回NULL
	 * 
	 * @param st
	 *            对象字符串
	 * @param pad
	 *            添加的字符
	 * @param cnt
	 *            位数
	 * @return 指定位数处理后的字符串
	 */
	public static String rPad(String st, char pad, int cnt) {

		if (null == st) {
			return st;
		} else {
			StringBuilder sb = new StringBuilder(st);
			while (sb.length() < cnt) {
				sb.insert(0, pad);
			}
			return sb.toString();
		}

	}

	/**
	 * 字符串是NULL或空串的时候返回TRUE
	 * 
	 * @param str
	 *            字符串
	 * @return true:空 false:非空
	 */
	public static final boolean isEmpty(String str) {

		return (null == str || "".equals(str));

	}

	/**
	 * 字符串是NULL或空串的时候返回TRUE（去空白后）。
	 * 
	 * @param str
	 *            字符串
	 * @return true:空 false:非空
	 */
	public static final boolean isTrimEmpty(String str) {

		return (null == str || "".equals(str.trim()));

	}

	/**
	 * 字符串是NULL转换成“”
	 * 
	 * @param str
	 *            字符串
	 */
	public static String isNull(String str) {

		if(null == str){
			str = "";
		}
		return str;

	}	
	
	/**
	 * obj是NULL转换成“”
	 * 
	 * @param str
	 *            字符串
	 */
	public static String objIsNull(Object obj) {

		if (null == obj) {
			obj = "";
		}
		return obj.toString();

	}
	
	/**
	 * 编辑年月。 YYYYMM→(YYYY/MM)
	 */
	public static String editHyoujiJushinYm(String yyyymm) {

		if (isEmpty(yyyymm)) {
			return "";
		} else {

			StringBuilder sb = new StringBuilder();
			for (int i = 0; i < yyyymm.length(); i++) {
				if (4 == i) {
					sb.append("/");
				}
				sb.append(yyyymm.charAt(i));
			}

			return sb.toString();
		}

	}

	// 单引号处理
	public static String addQuote(String source) {

		if (null == source || -1 == source.indexOf("'")) {
			return source;
		} else {
			StringBuffer sb = new StringBuffer();
			char c;
			for (int i = 0; i < source.length(); i++) {
				c = source.charAt(i);
				if ('\'' == c) {
					sb.append('\'');
				}
				sb.append(c);
			}
			return sb.toString();
		}

	}

	// 双引号处理
	public static String addDblQuote(String source) {

		if (null == source || -1 == source.indexOf("\"")) {
			return source;
		} else {
			StringBuffer sb = new StringBuffer();
			char c;
			for (int i = 0; i < source.length(); i++) {
				c = source.charAt(i);
				if ('"' == c) {
					sb.append("\\");
				}
				sb.append(c);
			}
			return sb.toString();
		}

	}

	/**
	 * 获取文件的名字
	 */
	public static String getFileName(java.io.File file) {

		String a = file.getName();
		int dotIndex = a.lastIndexOf(".");
		if (-1 == dotIndex) {
			return null;
		}

		return a.substring(0, dotIndex);

	}

	public static boolean isNumber(String str) {

		if (null == str) {
			return false;
		} else {
			return NUMBER_PATTERN.matcher(str).matches();
		}

	}

	/** 右去空 */
	public static String rtrim(String source) {

		if (source == null) {
			return source;
		} else {
			StringBuffer tempSql = new StringBuffer(source);
			int len = tempSql.length();
			while (Character.isWhitespace(tempSql.charAt(len - 1))) {
				tempSql.deleteCharAt(len - 1);
				len--;
			}
			return tempSql.toString();
		}

	}

	/** 获取中文下载名称 */
	public static String getDownChinaName(String fileName) {

		if (StringUtil.isTrimEmpty(fileName)) {
			fileName = "";
		} else {
			try {
				fileName = URLEncoder.encode(fileName, "GB2312");
				fileName = URLDecoder.decode(fileName, "ISO8859_1");
			} catch (UnsupportedEncodingException e) {
				return fileName;
			}
		}

		return fileName;

	}

	/**
	 * 提取a字符到b字符之间的字符串
	 * 
	 * @param str
	 * @param a
	 * @param b
	 * @return
	 */
	public static String getSubString(String str, char a, char b) {

		return str.substring(str.indexOf(a) + 1, str.indexOf(b));

	}
	
	/**
	 * obj是NULL转换成“”
	 * 
	 * @param str
	 *            字符串
	 */
	public static String objToString(Object obj) {

		if (null == obj) {
			obj = "";
		}
		return obj.toString();

	}
	
	/**
	 * 字符型转换成int型
	 * 
	 * @param str
	 *            整数字符串
	 * @param defaultInt
	 *            默认返回值
	 * @return
	 */
	public static int StringToInt(String str, int defaultInt) {
		if (isEmpty(str) || !str.matches("^-?\\d+$")) {
			return defaultInt;
		} else {
			return Integer.parseInt(str);
		}
	}

	/**
	 * 字符串截取，为null则返回"",截取位数不够则返回原字符串
	 * 
	 * @param str
	 *            要截取的字符串
	 * @param start
	 *            截取起始处
	 * @param end
	 *            截取结束处
	 * @return
	 */
	public static String substring(String str, int start, int end) {

		// 为空返回""
		if (str == null) {
			return "";
		}

		// 截取起始处大于截取结束处返回原字符串
		if (start > end) {
			return str;
		}

		// 截取字符串不够长返回原字符串
		if (str.length() < start || str.length() < end) {
			return str;
		}

		return str.substring(start, end);
	}
	
	/**
	 * 获取字符串，空或null返回""
	 * @param str
	 * @return
	 */
	public static String getString(String str){
		if (isEmpty(str)) {
			return "";
		}
		return str;
	}
	
	/**
	 * Clob转String
	 * @param clob
	 * @return
	 */
	public static String clobToString(Clob clob) {
		if (clob == null) {
			return null;
		}
		BufferedReader reader = null;
		try {
			reader = new BufferedReader(clob.getCharacterStream());
			StringBuffer buf = new StringBuffer();
			String line = null;
			while ((line = reader.readLine()) != null) {
				buf.append(line);
			}
			return buf.toString();
		} catch (Exception e) {
			e.printStackTrace(System.out);
			return null;
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException e) {
					//
				}
			}
		}
	}

	/**
	 * String转Clob
	 * @param str
	 * @return
	 */
	public static Clob stringToClob(String str) {
		if (null == str)
			return null;
		else {
			try {
				java.sql.Clob c = new javax.sql.rowset.serial.SerialClob(
						str.toCharArray());
				return c;
			} catch (Exception e) {
				return null;
			}
		}
	}

	public static void main(String[] args) {
		String s = "1312 ";
		System.out.println(StringUtil.rtrim(s)+"24");
		
	}

}
